/******************************************************************************
                         COPYRIGHT 1955-2008 by BUPT ISC.
                        北京邮电大学信息安全中心 版权所有
                           Web: http://www.bupt.edu.cn
 *******************************************************************************/
/*******************************************************************************
  文件名： queue.h
  项目：   
  模块：   common
  作者：   huangwei
  版本：   0.2
  创建于:  2008-11-04 
  描述：
    队列的数据结构声明和基本操作方法声明

  修改历史：
  日期：2008/11/13  修改人：姜文
  修改描述：
  1.NODE中的pcData类型由char *改为void *
  2.增加enQueue_NoMalloc函数
 *********************************************************************************/
#ifndef QUEUEHEAD
#define QUEUEHEAD

typedef struct _NODE 
{
    int     iDataLen;       /* 存储在节点中的数据长度 */
    void    *pcData;          /* 存储在节点中的数据     */
    struct  _NODE *pstNext;    /* 队列中的下一个节点地址 */
}NODE;

 

typedef struct _Queue
{
    NODE    *pstHead;          /* 队列的头部 */
    NODE    *pstEnd;           /* 队列的尾部 */
    int     iCount;          /* 队列长度   */
}QUEUE;

#if !defined(bool)
#define bool int
#endif

#if !defined(true)
#define true 1
#endif

#if !defined(false)
#define false 0
#endif

/* 初始化队列 */
bool initQueue( QUEUE *pstQueue );

/* 在队列中插入节点 */
bool enQueue( QUEUE *pstQueue, void *pcQueueData, int iDataLen );

/* 从队列中读出一个节点 */
bool deQueue( QUEUE *pstQueue, NODE *pstNode );

/* 释放队列所有内存 */
void freeQueue( QUEUE *pstQueue );

/*在队列中插入节点，不需要为数据新开辟空间*/
bool enQueue_NoMalloc(QUEUE *pstQueue, void *pstQueueData);
#endif
